"use strict";
/*
  命名空间 与 命名空间模块化
    命名空间在其他语言中已经是一个很常见的功能了  c# java php都有命名空间的

    过去JS是不存在命名空间的  在TS里面 实现了命名空间  但实际的原理还是通过立即执行函数（自执行函数） - 因为函数有块作用域

*/
// TS使用 namespace 空间名{} 的形式来定义命名空间  命名空间下的数据放在大括号里面
var space1;
(function (space1) {
    var sname = 'Jimmy';
    function showa() {
        //要想在外界使用命名空间里面的数据 需要将空间里面的数据导出
        console.log(sname);
    }
    space1.showa = showa;
})(space1 || (space1 = {}));
var space2;
(function (space2) {
    var sname = 'xuexue';
    function showa() {
        console.log(sname);
    }
    space2.showa = showa;
})(space2 || (space2 = {}));
space2.showa(); //  xuexue
space1.showa(); //  Jimmy
/*
  使用 export 导出数据
*/
/*
  模块化知识点复习：
    export 和 export default 区别
      export default 只能导出一次  （所以是需要将要导出的数据一起放在一个对象里面 统一导出）

      export 可以分多次导出  默认的也会将分多次导出的数据整合成一个对象的形式导出

  TS中的模块化的导出导出 和 ES6 的模块化导入导出基本是一致的
*/
/*
  命名空间和模块化的异同
    相同点：
      都可以实现变量名‘重复定义’
    不同点：
      命名空间：内部模块，主要是用于组织代码，避免命名冲突
      模块：  TS的外部模块检测，  主要侧重的是代码的复用，一个模块里可以有多个命名空间
*/
